1573D - Xor of 3 - CodeForces Solution


constructive algorithms *2500

Please click on ads to support us..

C++ Code:

#include <bits/stdc++.h>
#define ll long long
#define db long double
#define N 200005
#define II pair <ll,ll>
#define III pair <ll,II>
#define IV pair <vector <int>,vector <int> >
#define fst first
#define snd second
using namespace std;
int n,i,j,a[N],test;
vector <int> res;
void done(int i)
{
    int x=((a[i]^a[i+1])^a[i+2]);
    a[i]=a[i+1]=a[i+2]=x;
    res.push_back(i);
}
void solve()
{
    cin>>n;
    int x=0,last,cnt=0;
    for(i=1;i<=n;i++) cin>>a[i],x^=a[i];
    if(x) { cout<<"NO"<<'\n'; return ; }
    res.clear();
    for(i=1;i<=n;i++)
        if(a[i])
        {
            cnt++;
            if(cnt&1) last=i;
            else
            {
                if((i-last-1)&1)
                {
                    for(j=last;j<=i-2;j+=2)
                        done(j);
                    for(j=i-3;j>=last;j-=2)
                        done(j-1);
                }
                else
                {
                    for(j=last;j<=i-3;j+=2)
                        done(j);
                }
            }
        }
    for(i=3;i<=n;i++)
    {
        j=i;
        while(j>=3 && a[j]+a[j-1]+a[j-2]==2)
            done(j-2),j-=2;
    }
    for(i=1;i<=n;i++)
        if(a[i]) { cout<<"NO"<<'\n'; return ; }
    cout<<"YES"<<'\n';
    cout<<res.size()<<'\n';
    for(int x:res) cout<<x<<" ";
    cout<<'\n';
}
int main()
{
  //  freopen("ntu.inp","r",stdin);
    //freopen("ntu.out","w",stdout);
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    cin>>test;
    while(test--) solve();
}


Comments

Submit
0 Comments
More Questions

1630C - Paint the Middle
1630D - Flipping Range
1328A - Divisibility Problem
339A - Helpful Maths
4A - Watermelon
476A - Dreamoon and Stairs
1409A - Yet Another Two Integers Problem
977A - Wrong Subtraction
263A - Beautiful Matrix
180C - Letter
151A - Soft Drinking
1352A - Sum of Round Numbers
281A - Word Capitalization
1646A - Square Counting
266A - Stones on the Table
61A - Ultra-Fast Mathematician
148A - Insomnia cure
1650A - Deletions of Two Adjacent Letters
1512A - Spy Detected
282A - Bit++
69A - Young Physicist
1651A - Playoff
734A - Anton and Danik
1300B - Assigning to Classes
1647A - Madoka and Math Dad
710A - King Moves
1131A - Sea Battle
118A - String Task
236A - Boy or Girl
271A - Beautiful Year